// 1. 定义一个接口CanFly，描述会飞的方法
interface CanFly {
    public void fly();
}

// 2. 定义飞机类，实现CanFly接口
class Airplane implements CanFly {
    private String name;

    public Airplane(String name) {
        this.name = name;
    }

    @Override
    public void fly() {
        System.out.println(name + "正在起飞，引擎轰鸣，冲上云霄！");
    }
}

// 2. 定义鸟类，实现CanFly接口
class Bird implements CanFly {
    private String name;

    public Bird(String name) {
        this.name = name;
    }

    @Override
    public void fly() {
        System.out.println(name + "展开翅膀，自由自在地飞翔在天空中！");
    }
}

// 3. 定义测试类
public class TestFly {

    // 3. 测试类中定义一个makeFly()方法，让会飞的事物飞起来
    public static void makeFly(CanFly obj) {
        obj.fly();
    }

    public static void main(String[] args) {
        // 4. 在main方法中创建飞机对象和鸟对象
        Airplane s = new Airplane("波音747");
        Bird bird = new Bird("老鹰");

        // 5. 在main方法中调用makeFly()方法，让飞机和鸟起飞
        System.out.println("=== 飞行测试开始 ===");
        makeFly(bird);
        makeFly(bird);
        System.out.println("=== 飞行测试结束 ===");
    }
}
